package 程序员面试金典;

import java.util.*;
import java.util.stream.Collectors;

public class 消失的两个数字 {

    //nb
    public int[] missingTwo1(int[] nums) {
        boolean []arr = new boolean[nums.length+3];
        for(int i=0;i<nums.length;i++)
            arr[nums[i]]= true;
        int[] ret = new int[2];
        for(int i=1, cnt = 0;i<arr.length;i++)
            if(!arr[i]) {
                ret[cnt++]=i;
                if(cnt==2)
                   break;
            }
        return ret;
    }
    public int[] missingTwo(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length + 2; i++) {
            set.add(i+1);
        }
        for (int i = 0; i < nums.length; i++) {
            set.remove(nums[i]);
        }
        LinkedList<Integer> list = new LinkedList<>();
        for (Integer integer : set) {
            list.add(integer);
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }

//    public int[] missingTwo(int[] nums) {
//        List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
//        LinkedList<Integer> ans = new LinkedList<>();
//        for (int i = 0; i < list.size(); i++) {
//            if (list.get(i)!=i+1){
//                ans.add(i+1);
//                list.add(i,i+1);
//            }
//        }
//        if (ans.size()==0){
//            return new int[]{nums.length+1,nums.length+2};
//        }
//        if (ans.size()==1){
//            return new int[]{ans.get(0),list.size()+1};
//        }
//        return ans.stream().mapToInt(Integer::intValue).toArray();
//    }
}
